import path from 'path';
import { NODE_ENV, LOG_FILE } from '../config';
import log4js from 'log4js';

const showInConsole = NODE_ENV === 'dev' || NODE_ENV === 'stage';

const layout = {
  type: 'pattern',
  /**
   * TRACEID - 追踪ID
   * %d - 日期, 格式 {yyyy-MM-dd hh.mm.ss.SSS}
   * %z - 进程ID
   * %p - level级别
   * %f - 文件名
   * %l - 行数
   * %m - 日志消息
   * %n - 换行
   */
  pattern:
    '%d{yyyy-MM-dd hh:mm:ss.SSS} [TRACEID:RAService] %z %-5p %-20f{2} L%l - %m%n',
};

log4js.configure({
  // pm2集群启动必须配置
  pm2: true,
  pm2InstanceVar: 'INSTANCE_ID',
  // 对日志级别和类别过滤
  appenders: {
    consoleLog: {
      type: 'console',
      layout,
    },
    dateFileLog: {
      // (10 * 1024 * 1024)B = 10Mb
      maxLogSize: 10 * 1024 * 1024,
      type: 'dateFile',
      filename: path.join(process.cwd(), '../../../', LOG_FILE),
      pattern: '.yyyy-MM-dd',
      compress: true,
      daysToKeep: 15,
      keepFileExt: true,
      layout,
    },
  },
  categories: {
    default: {
      // uat 和 prod 环境在日志文件中输出即可
      appenders: showInConsole
        ? ['consoleLog', 'dateFileLog']
        : ['dateFileLog'],
      // uat 和 prod 环境采用 info 模式
      level: showInConsole ? 'debug' : 'info',
      enableCallStack: true,
    },
  },
});

const logger = log4js.getLogger();

logger.debug('系统日志路径', path.join(process.cwd(), '../../../', LOG_FILE));

export default logger;
